﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SAAC.DTO;
using SAAC.DAL;

namespace SAAC.BLL
{
	public class ProfessorBLL
	{
		protected ProfessorDAL _professorDAL;

		public ProfessorBLL()
		{
			if (_professorDAL == null)
				_professorDAL = new ProfessorDAL();
		}

		public ProfessorDTO Select(ProfessorDTO dto, string order = null)
		{
			try
			{
				return _professorDAL.Select(dto, order);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		public List<ProfessorDTO> SelectAll(ProfessorDTO dto, string order = null, int limit = 1000)
		{
			try
			{
				return _professorDAL.SelectAll(dto, order, limit);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		public void Insert(ProfessorDTO dto)
		{
			try
			{
				_professorDAL.Insert(dto);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		public void Update(ProfessorDTO dto)
		{
			try
			{
				_professorDAL.Update(dto);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		public void Delete(ProfessorDTO dto)
		{
			try
			{
				_professorDAL.Delete(dto);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		public List<ProfessorDTO> SelectAllChild(ProfessorDTO dto, string order = null, int limit = 1000)
		{
			var listaProfessores = new List<ProfessorDTO>();
			var bllComissao = new ComissaoBLL();
			var bllColegiado = new ColegiadoBLL();

			try
			{
				listaProfessores = _professorDAL.SelectAll(dto, order, limit);

				foreach (var item in listaProfessores)
				{
					bllColegiado.Select(item.Colegiado);
					bllComissao.Select(item.Comissao);
				}

				return listaProfessores;
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		public bool IsCoordenadorOuVice(ProfessorDTO dto)
		{
			bool b = false;
			try
			{
				//Varifica se é coordenador ou vice
				var dtoColegiado = new ColegiadoDTO();
				var bllColegiado = new ColegiadoBLL();
				dtoColegiado.Coordenador = new ProfessorDTO();
				dtoColegiado.Coordenador.Matricula = dto.Matricula;
				dtoColegiado = bllColegiado.Select(dtoColegiado);
				if (dtoColegiado == null)
				{
					dtoColegiado = new ColegiadoDTO();
					dtoColegiado.ViceCoordenador = new ProfessorDTO();
					dtoColegiado.ViceCoordenador.Matricula = dto.Matricula;
					dtoColegiado = bllColegiado.Select(dtoColegiado);
				}
				b = (dtoColegiado != null);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return b;
		}
	}
}
